package com.pcjavanet.generate;

import java.lang.reflect.Field;

public class DaoClassCreateTemplate extends CreateClassTemplate {
	private static final String BLANK_TWO_SPACE= "  ";
	@Override
	public String createFieldsDefineStr() {
		StringBuffer buf = new StringBuffer();
		if ( getFs().length>0){
		for(int i=0; i<getFs().length; i++	){
			String typeName = getFs()[i].getType().toString().replace("class"," ");
			buf.append(BLANK_TWO_SPACE).append("private ").append( typeName )
			.append(" ").append( getFs()[i].getName() ).append(" ;\r\n"	);
		}
		}
		return buf.toString();
	}

	@Override
	public String createGetSetMethodStr() {
		StringBuffer buf = new StringBuffer();
		if ( getFs().length>0)
		for(int i=0; i<getFs().length; i++	){
			Field f =getFs()[i] ;
			String typeName = f.getType().toString().replace("class"," ");
			if ( typeName.toString().equalsIgnoreCase("boolean")) {
				buf.append(BLANK_TWO_SPACE).append("public ").append(typeName).append(" is").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("() {\r\n");
				buf.append(BLANK_TWO_SPACE).append(" 	return this.").append(f.getName()).append(";\r\n");
				buf.append(BLANK_TWO_SPACE).append("}\r\n");
				
				buf.append(BLANK_TWO_SPACE).append("public  void set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(").append(typeName).append("  ").append(f.getName()).append(") {\r\n");
				buf.append(BLANK_TWO_SPACE).append(" 	 this.").append(f.getName()).append("=").append(f.getName()).append(";\r\n");
				buf.append(BLANK_TWO_SPACE).append("}\r\n");
			} else {
				buf.append(BLANK_TWO_SPACE).append("public  ").append(typeName).append(" get").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("() {\r\n");
				buf.append(BLANK_TWO_SPACE).append(" 	return this.").append(f.getName()).append(";\r\n");
				buf.append(BLANK_TWO_SPACE).append("}\r\n");
				
				buf.append(BLANK_TWO_SPACE).append("public void set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(").append(typeName).append("  ").append(f.getName()).append(") {\r\n");
				buf.append(BLANK_TWO_SPACE).append(" 	 this.").append(f.getName()).append("=").append(f.getName()).append(";\r\n");
				buf.append(BLANK_TWO_SPACE).append("}\r\n");
			}
		}
		return buf.toString();
	}

	@Override
	public String createActionMethodByName(String methodName) {
		StringBuffer buf = new StringBuffer();
		buf.append(BLANK_TWO_SPACE).append("public String  ").append(methodName).append("() throws Exception{\r\n" );
		String beanHandler = "bean";
		buf.append(BLANK_TWO_SPACE).append("	"+getCls().getSimpleName()).append(" bean =").append( " new ").append( getCls().getSimpleName()).append("();");
		if ( getFs().length>0)
			for(int i=0; i<getFs().length; i++	){
				Field f =getFs()[i] ;
				String typeName = f.getType().toString().replace("class"," ");
				if ( typeName.toString().equalsIgnoreCase("boolean")) {
					buf.append(BLANK_TWO_SPACE).append("public  void set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(").append(typeName).append("  ").append(f.getName()).append(") {\r\n");
					buf.append(BLANK_TWO_SPACE).append(" 	 this.").append(f.getName()).append("=").append(f.getName()).append(";\r\n");
					buf.append(BLANK_TWO_SPACE).append("}\r\n");
				} else {
					buf.append(BLANK_TWO_SPACE).append("public void set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(").append(typeName).append("  ").append(f.getName()).append(") {\r\n");
					buf.append(BLANK_TWO_SPACE).append(" 	 this.").append(f.getName()).append("=").append(f.getName()).append(";\r\n");
					buf.append(BLANK_TWO_SPACE).append("}\r\n");
				}
			}
		buf.append(BLANK_TWO_SPACE).append("}\r\n");
		
		return buf.toString();
	}

	@Override
	public String createImportStr() {
		StringBuffer buf = new StringBuffer();
		buf.append("import org.apache.struts2.StrutsStatics;\r\n");
		buf.append("import org.springframework.context.ApplicationContext;\r\n");
		buf.append("import org.springframework.web.context.support.WebApplicationContextUtils;\r\n");
		
		buf.append("import com.opensymphony.xwork2.ActionContext;\r\n");
		buf.append("import com.opensymphony.xwork2.ActionSupport;\r\n");
		
		return buf.toString();
	}

	@Override
	public String createBodyBegin() {
		StringBuffer buf = new StringBuffer();
		buf.append("public class ").append( getCls().getSimpleName()).append("Action ").append(" extends ActionSupport {\r\n");
		return buf.toString();
	}

	@Override
	public String createInsertMethod() {
		StringBuffer buf = new StringBuffer();
		String name = getCls().getSimpleName();
		name = name.substring(0, 1).toLowerCase()+name.substring(1, name.length());
		buf.append(BLANK_TWO_SPACE).append("public String  ").append("insert").append(getCls().getSimpleName()).append("() throws Exception{\r\n" );
		buf.append(BLANK_TWO_SPACE).append("	"+getCls().getSimpleName()).append(" bean =").append( " new ").append( getCls().getSimpleName()).append("();\r\n");
		if ( getFs().length>0)
			for(int i=0; i<getFs().length; i++	){
				Field f =getFs()[i] ;
				String typeName = f.getType().toString().replace("class"," ");
				buf.append(BLANK_TWO_SPACE).append("	bean.set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(this.").append(f.getName()).append("); \r\n");
			}
		buf.append("	").append(name).append("Service.insert").append(getCls().getSimpleName()).append("(bean);\r\n");
		buf.append(BLANK_TWO_SPACE).append(" 	return SUCCESS\r\n");
		buf.append(BLANK_TWO_SPACE).append("}\r\n");
		return buf.toString();
	}

	@Override
	public String createQueryMethod() {
		StringBuffer buf = new StringBuffer();
		String name = getCls().getSimpleName();
		name = name.substring(0, 1).toLowerCase()+name.substring(1, name.length());
		buf.append(BLANK_TWO_SPACE).append("public String  ").append("query").append(getCls().getSimpleName()).append("() throws Exception{\r\n" );
		buf.append(BLANK_TWO_SPACE).append("	"+getCls().getSimpleName()).append(" bean =").append( " new ").append( getCls().getSimpleName()).append("();\r\n");
		if ( getFs().length>0)
			for(int i=0; i<getFs().length; i++	){
				Field f =getFs()[i] ;
				String typeName = f.getType().toString().replace("class"," ");
				buf.append(BLANK_TWO_SPACE).append("	bean.set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(this.").append(f.getName()).append("); \r\n");
			}
		buf.append("	").append(name).append("Service.query").append(getCls().getSimpleName()).append("(bean);\r\n");
		buf.append(BLANK_TWO_SPACE).append(" 	return SUCCESS\r\n");
		buf.append(BLANK_TWO_SPACE).append("}\r\n");
		return buf.toString();
	}

	@Override
	public String createUpdateMethod() {
		StringBuffer buf = new StringBuffer();
		String name = getCls().getSimpleName();
		name = name.substring(0, 1).toLowerCase()+name.substring(1, name.length());
		buf.append(BLANK_TWO_SPACE).append("public String  ").append("update").append(getCls().getSimpleName()).append("() throws Exception{\r\n" );
		buf.append(BLANK_TWO_SPACE).append("	"+getCls().getSimpleName()).append(" bean =").append( " new ").append( getCls().getSimpleName()).append("();\r\n");
		if ( getFs().length>0)
			for(int i=0; i<getFs().length; i++	){
				Field f =getFs()[i] ;
				String typeName = f.getType().toString().replace("class"," ");
				buf.append(BLANK_TWO_SPACE).append("	bean.set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(this.").append(f.getName()).append("); \r\n");
			}
		buf.append("	").append(name).append("Service.update").append(getCls().getSimpleName()).append("(bean);\r\n");
		buf.append(BLANK_TWO_SPACE).append(" 	return SUCCESS\r\n");
		buf.append(BLANK_TWO_SPACE).append("}\r\n");
		return buf.toString();
	}

	@Override
	public String createDeleteMethod() {
		StringBuffer buf = new StringBuffer();
		String name = getCls().getSimpleName();
		name = name.substring(0, 1).toLowerCase()+name.substring(1, name.length());
		buf.append(BLANK_TWO_SPACE).append("public String  ").append("delete").append(getCls().getSimpleName()).append("() throws Exception{\r\n" );
		buf.append(BLANK_TWO_SPACE).append("	"+getCls().getSimpleName()).append(" bean =").append( " new ").append( getCls().getSimpleName()).append("();\r\n");
		if ( getFs().length>0)
			for(int i=0; i<getFs().length; i++	){
				Field f =getFs()[i] ;
				String typeName = f.getType().toString().replace("class"," ");
				buf.append(BLANK_TWO_SPACE).append("	bean.set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(this.").append(f.getName()).append("); \r\n");
			}
		buf.append("	").append(name).append("Service.delete").append(getCls().getSimpleName()).append("(bean);\r\n");
		buf.append(BLANK_TWO_SPACE).append(" 	return SUCCESS\r\n");
		buf.append(BLANK_TWO_SPACE).append("}\r\n");
		return buf.toString();
	}

	@Override
	public String createListMethod() {
		StringBuffer buf = new StringBuffer();
		String name = getCls().getSimpleName();
		name = name.substring(0, 1).toLowerCase()+name.substring(1, name.length());
		buf.append(BLANK_TWO_SPACE).append("public String  ").append("list").append(getCls().getSimpleName()).append("() throws Exception{\r\n" );
		buf.append(BLANK_TWO_SPACE).append("	"+getCls().getSimpleName()).append(" bean =").append( " new ").append( getCls().getSimpleName()).append("();\r\n");
		if ( getFs().length>0)
			for(int i=0; i<getFs().length; i++	){
				Field f =getFs()[i] ;
				String typeName = f.getType().toString().replace("class"," ");
				buf.append(BLANK_TWO_SPACE).append("	bean.set").append(f.getName().substring(0, 1).toUpperCase()+f.getName().substring(1, f.getName().length()	)).append("(this.").append(f.getName()).append("); \r\n");
			}
		buf.append("	").append(name).append("Service.list").append(getCls().getSimpleName()).append("(bean);\r\n");
		buf.append(BLANK_TWO_SPACE).append(" 	return SUCCESS\r\n");
		buf.append(BLANK_TWO_SPACE).append("}\r\n");
		return buf.toString();
	}

	@Override
	public String createBeanServiceStr() {
		// TODO Auto-generated method stub
		return "";
	}

}
